package ar.com.jendrix.common.persistence.entity.service;

import java.util.List;

import ar.com.jendrix.common.exception.ApplicationException;
import ar.com.jendrix.common.exception.SystemException;
import ar.com.jendrix.common.exception.ValidationException;
import ar.com.jendrix.common.persistence.entity.dto.BaseEntityDTO;

public interface EntityService<DTO extends BaseEntityDTO> {

	/**
	 * 
	 * @param entityID
	 * @return
	 * @throws SystemException
	 */
	public abstract DTO get(Long entityId) throws SystemException;

	/**
	 * 
	 * @param entityId
	 * @return
	 * @throws SystemException
	 */
	public abstract DTO getFull(Long entityId) throws SystemException;

	/**
	 * 
	 * @return
	 * @throws SystemException
	 */
	public abstract List<DTO> getList() throws SystemException;

	/**
	 * 
	 * @param dto
	 * @return
	 * @throws ValidationException
	 * @throws ApplicationException
	 * @throws SystemException
	 */
	public abstract DTO save(DTO dto) throws ValidationException, ApplicationException, SystemException;

	/**
	 * 
	 * @param entityId
	 * @throws ApplicationException
	 * @throws SystemException
	 */
	public abstract void delete(Long entityId) throws ApplicationException, SystemException;

	/**
	 * 
	 * @param entityId
	 * @throws ApplicationException
	 * @throws SystemException
	 */
	public abstract void logicalDelete(Long entityId) throws ApplicationException, SystemException;
}